from otree.api import *

doc = """
Base app – only treatment display.
"""

# =====================================================
# KONŠTANTY
# =====================================================
class C(BaseConstants):
    NAME_IN_URL = 'base'
    PLAYERS_PER_GROUP = None
    NUM_ROUNDS = 1


# =====================================================
# MODELY
# =====================================================
class Subsession(BaseSubsession):
    pass


class Group(BaseGroup):
    pass


class Player(BasePlayer):
    is_judge = models.BooleanField(initial=False)
    pgg_group = models.IntegerField(initial=0)
    subgroup = models.IntegerField(initial=0)


# =====================================================
# STRÁNKY
# =====================================================
class Intro(Page):
    def vars_for_template(self):
        return dict(
            treatment=self.session.config.get('treatment_type')
        )

class SetupWaitPage(WaitPage):

    def after_all_players_arrive(self):
        players = self.subsession.get_players()
        treatment = self.session.config.get('treatment_type')

        # reset
        for p in players:
            p.is_judge = False
            p.pgg_group = 0
            p.subgroup = 0

        # ------------------
        # JUDGES
        # ------------------
        if treatment in ['human_judge', 'humanAI_judge']:
            for p in players:
                if p.id_in_subsession == 1:
                    p.is_judge = True
                    p.subgroup = 1
                elif p.id_in_subsession == 2:
                    p.is_judge = True
                    p.subgroup = 2

            normal_players = [p for p in players if not p.is_judge]
        else:
            normal_players = players

        # ------------------
        # PGG GROUPS
        # ------------------
        import random
        random.shuffle(normal_players)

        group_id = 1
        for i in range(0, len(normal_players), 4):
            for p in normal_players[i:i+4]:
                p.pgg_group = group_id
            group_id += 1

        # ------------------
        # SUBGROUPS
        # ------------------
        num_pgg_groups = (group_id - 1)
        half_pgg_groups = num_pgg_groups // 2

        for p in normal_players:
            if p.pgg_group <= half_pgg_groups:
                p.subgroup = 1
            else:
                p.subgroup = 2


class SetupInfo(Page):
    def vars_for_template(self):
        return dict(
            players=self.subsession.get_players(),
            treatment=self.session.config.get('treatment_type'),
        )

# =====================================================
# SEKVENCIA
# =====================================================
page_sequence = [
    Intro,
    SetupWaitPage,
    SetupInfo,
]
